package com.itzmn.newcode.offer1;

/**
 * @Author: 张梦楠
 * @Date: 2018/12/18 15:56
 * 简书：https://www.jianshu.com/u/d611be10d1a6
 * 码云：https://gitee.com/zhangqiye
 * @Description: 二进制中1的个数
 *
 *  输入一个整数，输出该数二进制表示中1的个数。其中负数用补码表示
 *
 *  1的二进制是1，其余都是0，那么和其他的值&，只有这个是1，得1则是，如果不是就不是
 *
 */
public class _11_TheNumberOf1InTheBinary {

    public static void main(String[] args) {


        System.out.println(Integer.toBinaryString(3));
        System.out.println(Integer.toBinaryString(4));
        System.out.println(Integer.toBinaryString(-5 << 1));
        System.out.println(Integer.toBinaryString(5 << 1));
        System.out.println(Integer.toBinaryString(10 << 1));

        new _11_TheNumberOf1InTheBinary().test();
    }

    private void test() {

        NumberOf1(4);
    }

    public int NumberOf1(int n) {

        int count = 0;
        int flag = 1;
        while ( flag != 0 ){

            if ((n&flag) !=0 ){
                count++;
            }
            flag = flag << 1;
        }
        System.out.println(count);
        return count;
    }


}
